# -*- coding: utf-8 -*
# 数据排序类
#!/usr/bin/python3

import sys
import os
sys.path.append(os.getcwd() + "\\2048")
from Core.Controller import OperationController

class SortHandle:

    @staticmethod
    def CheckCanSort():
        return False

    #up和left都是数据从右往左叠加 （执行一次reserve方法）
    #down和right数据是从左往右叠加 
    @staticmethod
    def Sort(sort_data,sort_type):
        enum_opt = OperationController.Operation

        if sort_type not in enum_opt:
            print("error sort_type is wrong  ",sort_type)
            return None
        if type(sort_data) is not tuple and type(sort_data) is not list:
            print("SortHandle.Sort()  error sort_data is wrong","\n",sort_data)
            return None

        #up和left都是数据从右往左叠加 （执行一次reserve方法 执行完排序后再执行一次reserve）
        #down和right数据是从左往右叠加 保持序列不变

        new_data = []
        for index in iter(range(len(sort_data))):
            temp_sort_data = list(sort_data[index])
 
            print("SortHandle.Sort()  1 temp_sort_data  \n",str(index) + " : ",temp_sort_data)
            temp_sort_data = SortHandle.__RealSort(temp_sort_data)
            print("SortHandle.Sort()  2 temp_sort_data  \n",str(index) + " : ",temp_sort_data)

            new_data.insert(index,temp_sort_data)

        return new_data


    @staticmethod
    def __RealSort(arg_list):
        sort_list = list(arg_list)
        
        #依次遍历最顶端的那个元素 maxIndex
        count = len(sort_list) - 1
        for index in iter(range(count + 1 )):
            max_index = count - index
            temp_count = max_index - 1

            # 依次遍历次顶端的那个元素 maxIndex - 1
            for temp_index in iter(range(temp_count + 1)):
                cur_index = temp_count - temp_index

                #判断次顶端是否为空 不为空
                if sort_list[cur_index] > 0:

                    #判断最顶端的元素是否为空 为空就直接放数据 continue
                    if sort_list[max_index] <= 0:
                        sort_list[max_index] = sort_list[cur_index]
                        sort_list[cur_index] = 0
                        continue

                    
                    #对比最顶端元素，如果相等则相加放在最顶端 continue
                    #如果最顶端和次顶端不相等则break 设置次顶端为最顶端，比较下一组
                    if sort_list[max_index] == sort_list[cur_index]:
                        sort_list[max_index] += sort_list[cur_index]
                        sort_list[cur_index] = 0
                        continue
                    else:
                        break
                    
        return sort_list